package mx.itesm.goyostacoadventure;

import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.texture.region.TiledTextureRegion;

import java.util.ArrayList;

/**
 * Created by OscarG on 13/04/15.
 */
public class Perro3 {

    double factorVelocidad = 0;
    private AnimatedSprite perro3Der;
    private AnimatedSprite perro3Izq;
    private AnimatedSprite perro3Up;
    private AnimatedSprite perro3Down;
    private AnimatedSprite perro3;
    private AnimatedSprite donGoyo;
    private Sprite chile;
    private int tipoPerro = 0;


    public Perro3(AnimatedSprite donGoyo, AdministradorRecursos admRecursos) {

        //float xa = (float) (Math.random() * ControlJuego.ANCHO_CAMARA);
        float xa = (float) (Math.random() * (1900 - (-1100) + 1) + (-1100)); //(max - min + 1) + min
        float ya = (float) (Math.random() * (1100 - (-600) + 1) + (-600)); //(max - min + 1) + min

        this.donGoyo = donGoyo;
        tipoPerro = (int) (Math.random() * (3 - 1 + 1) + 1);

        if (tipoPerro == 1) {
            TiledTextureRegion regionPerro3Der = admRecursos.regionPerro3Der;
            perro3Der = new AnimatedSprite(xa, ya,
                    regionPerro3Der, admRecursos.vbom);
            perro3Der.animate(80);

            TiledTextureRegion regionPerro3Izq = admRecursos.regionPerro3Izq;
            perro3Izq = new AnimatedSprite(xa, ya,
                    regionPerro3Izq, admRecursos.vbom);
            perro3Izq.animate(80);

            TiledTextureRegion regionPerro3Down = admRecursos.regionPerro3Down;
            perro3Down = new AnimatedSprite(xa, ya,
                    regionPerro3Down, admRecursos.vbom);
            perro3Down.animate(80);

            TiledTextureRegion regionPerro3Up = admRecursos.regionPerro3Up;
            perro3Up = new AnimatedSprite(xa, ya,
                    regionPerro3Up, admRecursos.vbom);
            perro3Up.animate(80);


            perro3 = perro3Der;

            factorVelocidad = ((Math.random() * 2) + 2); //El numero que haya entre 4 y 5 y le sumas el numero menor para recorrerlo
        }
        if (tipoPerro == 2) {
            TiledTextureRegion regionPerro3Der = admRecursos.regionPerro3Der2;
            perro3Der = new AnimatedSprite(xa, ya,
                    regionPerro3Der, admRecursos.vbom);
            perro3Der.animate(80);

            TiledTextureRegion regionPerro3Izq = admRecursos.regionPerro3Izq2;
            perro3Izq = new AnimatedSprite(xa, ya,
                    regionPerro3Izq, admRecursos.vbom);
            perro3Izq.animate(80);

            TiledTextureRegion regionPerro3Down = admRecursos.regionPerro3Down2;
            perro3Down = new AnimatedSprite(xa, ya,
                    regionPerro3Down, admRecursos.vbom);
            perro3Down.animate(80);

            TiledTextureRegion regionPerro3Up = admRecursos.regionPerro3Up2;
            perro3Up = new AnimatedSprite(xa, ya,
                    regionPerro3Up, admRecursos.vbom);
            perro3Up.animate(80);


            perro3 = perro3Der;

            factorVelocidad = ((Math.random() * 2) + 2); //El numero que haya entre 4 y 5 y le sumas el numero menor para recorrerlo
        }
        if (tipoPerro == 3) {
            TiledTextureRegion regionPerro3Der = admRecursos.regionPerro3Der3;
            perro3Der = new AnimatedSprite(xa, ya,
                    regionPerro3Der, admRecursos.vbom);
            perro3Der.animate(80);

            TiledTextureRegion regionPerro3Izq = admRecursos.regionPerro3Izq3;
            perro3Izq = new AnimatedSprite(xa, ya,
                    regionPerro3Izq, admRecursos.vbom);
            perro3Izq.animate(80);

            TiledTextureRegion regionPerro3Down = admRecursos.regionPerro3Down3;
            perro3Down = new AnimatedSprite(xa, ya,
                    regionPerro3Down, admRecursos.vbom);
            perro3Down.animate(80);

            TiledTextureRegion regionPerro3Up = admRecursos.regionPerro3Up3;
            perro3Up = new AnimatedSprite(xa, ya,
                    regionPerro3Up, admRecursos.vbom);
            perro3Up.animate(80);


            perro3 = perro3Der;

            factorVelocidad = ((Math.random() * 2) + 2); //El numero que haya entre 4 y 5 y le sumas el numero menor para recorrerlo
        }


    }

    public void perseguirDonGoyo(EscenaJuego escenaJuego, AnimatedSprite donG) {
        AnimatedSprite donGoyo = donG;
        float dx = donGoyo.getX() - perro3.getX();
        float dy = donGoyo.getY() - perro3.getY();
        float length = (float) Math.sqrt(dx * dx + dy * dy);
        float accelerationX = dx / length;
        float accelerationY = dy / length;
        perro3.setX((float) ((accelerationX * factorVelocidad) + perro3.getX())); // entre 3 y 5
        perro3.setY((float) ((accelerationY * factorVelocidad) + perro3.getY())); //

        if (dx > 0 && dy > 0 && dy < dx && perro3 != perro3Der) {
            perro3Der.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Der;
            escenaJuego.attachChild(perro3);
        }

        if (dx > 0 && dy < 0 && dy > (-dx) && perro3 != perro3Der) {
            perro3Der.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Der;
            escenaJuego.attachChild(perro3);
        }

        if (dx < 0 && dy > 0 && dy > (-dx) && perro3 != perro3Up) {
            perro3Up.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Up;
            escenaJuego.attachChild(perro3);
        }

        if (dx > 0 && dy > 0 && dy > dx && perro3 != perro3Up) {
            perro3Up.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Up;
            escenaJuego.attachChild(perro3);
        }

        if (dy > 0 && dx < 0 && dy < (-dx) && perro3 != perro3Izq) {
            perro3Izq.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Izq;
            escenaJuego.attachChild(perro3);
        }

        if (dy < 0 && dx < 0 && dy > dx && perro3 != perro3Izq) {
            perro3Izq.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Izq;
            escenaJuego.attachChild(perro3);
        }

        if (dy < 0 && dx < 0 && dy < dx && perro3 != perro3Down) {
            perro3Down.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Down;
            escenaJuego.attachChild(perro3);
        }

        if (dx > 0 && dy < 0 && dy < (-dx) && perro3 != perro3Down) {
            perro3Down.setPosition(perro3);
            perro3.detachSelf();
            perro3 = perro3Down;
            escenaJuego.attachChild(perro3);
        }

        /*if (perro3.collidesWith(donGoyo) ) {
            perro3.detachSelf();
            lista.remove(this);

        }*/
    }

    public boolean atrapaDonGoyo(ArrayList<Perro3> lista, AnimatedSprite donG, boolean statusPerro) {
        statusPerro = true;
        AnimatedSprite donGoyo = donG;
        if (perro3.getX() >= donGoyo.getX() - donGoyo.getWidth() / 2 && perro3.getX() <= donGoyo.getX() + donGoyo.getWidth() / 2) {
            if (perro3.getY() >= donGoyo.getY() - donGoyo.getHeight() / 2 && perro3.getY() <= donGoyo.getY() + donGoyo.getHeight() / 2) {
                MoveModifier modP3 = new MoveModifier(3, perro3.getX(), perro3.getY(), perro3.getX() - 500, perro3.getY() - 500) {
                    @Override
                    protected void onModifierFinished(IEntity pItem) {
                        super.onModifierFinished(pItem);

                    }
                };
                perro3.registerEntityModifier(modP3);
                return true;
            }
        }
        statusPerro = false;
        return false;
    }

    public boolean choqueConChile(Sprite chile, int resistenciaChile) {
        if (resistenciaChile == 2) {
            MoveModifier modP3 = new MoveModifier(3, perro3.getX(), perro3.getY(), perro3.getX() - 500, perro3.getY() - 500) {
                @Override
                protected void onModifierFinished(IEntity pItem) {
                    super.onModifierFinished(pItem);

                }
            };
            perro3.registerEntityModifier(modP3);
            return true;
        } else
            resistenciaChile++;
        return false;
    }

    /*public boolean chocaConChile(Sprite chile){

        if (chile.collidesWith(perro3)){
            //perro3.detachSelf();
            //Log.i("", "choqueeeeeeeeeee");
            chile.detachSelf();
            perro3.detachSelf();
            return true;
        }

        //if (chile.getX() >= perro3.getX()-perro3.getWidth()/2 && chile.getX() <= perro3.getX()+perro3.getWidth()/2){
            if (chile.getY() >= perro3.getY()-perro3.getHeight()/2 && chile.getY() <= perro3.getY()+perro3.getHeight()/2){
                perro3.detachSelf();
                return true;
            }
        //}
        return false;
    }*/

    public void retirada(EscenaJuego escenaJuego) {
        if (perro3 == perro3Izq || perro3 == perro3Down) {
            MoveModifier modP3 = new MoveModifier(3, perro3.getX(), perro3.getY(), perro3.getX() - 500, perro3.getY() - 500) {
                @Override
                protected void onModifierFinished(IEntity pItem) {
                    super.onModifierFinished(pItem);

                }
            };
            perro3.registerEntityModifier(modP3);
        }
        if (perro3 == perro3Der || perro3 == perro3Up) {
            MoveModifier modP3 = new MoveModifier(3, perro3.getX(), perro3.getY(), perro3.getX() + 500, perro3.getY() + 500) {
                @Override
                protected void onModifierFinished(IEntity pItem) {
                    super.onModifierFinished(pItem);

                }
            };
            perro3.registerEntityModifier(modP3);

        }
    }

    public AnimatedSprite getPerro3() {
        return perro3;
    }
}